/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.*;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author CiberPulpo
 */
public class DAOEntidadDetalle_Reporte extends ManejadorBaseDatos implements IDAOPersistencia {

    public DAOEntidadDetalle_Reporte() throws Exception {
        super();
    }

    public DAOEntidadDetalle_Reporte(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        super(driver, servidor, url, usuarioBD, passwordUsuarioBD, nombreBD);
    }

    public int contar() {
        int rpta = 0;
        try {
            ResultSet prueba;
            CallableStatement proc = getConexion().prepareCall(" CALL detalle_reporte_contar() ");
            prueba = proc.executeQuery();
            while (prueba.next()) {
                rpta = Integer.parseInt(prueba.getString("MAX(id_T_detall_report)"));
            }
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        //desconectar();
        return rpta;
    }
    
    
    public int validar_existencia_Reporte(String fecha,int cod_establec) {
        int rpta = 0;
        try {
            ResultSet prueba;
            CallableStatement proc = getConexion().prepareCall(" CALL detalle_reporte_validar_insertar(?,?) ");
            proc.setString("pfecha", fecha);//Tipo String
            proc.setInt("pcod_establec", cod_establec);//Tipo String
            prueba = proc.executeQuery();
            while (prueba.next()) {
                rpta = Integer.parseInt(prueba.getString("COUNT(*)"));
            }
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        //desconectar();
        return rpta;
    }


    @Override
    public int insertar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        Connection conn = getConexion();
        try {
            String [][][] tabla_Valores = miEntidadDetalle_Reporte.getValor();
            int [][] cod_fila = miEntidadDetalle_Reporte.getCod_fila();
            int [][] cod_colum = miEntidadDetalle_Reporte.getCod_columna();
            
            int Id_Max_Report=contar()+1;
            String sentencia = "";
            int[] num_fila = miEntidadDetalle_Reporte.getNum_fila();
            int[] num_colum = miEntidadDetalle_Reporte.getNum_columna();
            
            for (int k = 0; k < 17; k++) {
                for (int i = 0; i < num_fila[k]; i++) {
                    for (int j = 0; j < num_colum[k]; j++) {
                        sentencia = sentencia + "(" + Id_Max_Report + ",'" + miEntidadDetalle_Reporte.getFecha() + "','" + tabla_Valores[k][i][j] + "'," + miEntidadDetalle_Reporte.getId_usuario() + "," + miEntidadDetalle_Reporte.getCod_establec() + ",'" + miEntidadDetalle_Reporte.getCod_microred() + "'," + miEntidadDetalle_Reporte.getId_unidadejecutora() + "," + miEntidadDetalle_Reporte.getCod_fon() + "," + miEntidadDetalle_Reporte.getId_categoria_establec() + ",'" + miEntidadDetalle_Reporte.getCod_distrito() + "'," + cod_fila[k][i] + "," + cod_colum[k][j] + "),";
                        Id_Max_Report = Id_Max_Report + 1;
                    }
                }
            }
            
            PreparedStatement proc = conn.prepareStatement("INSERT INTO `t_detalle_reporte` VALUES "+sentencia.substring(0, sentencia.length()-1) +";");
            proc.execute();
        } catch (Exception e) {
            System.out.println(e + "REprueba");
        }
        desconectar();
        return rpta;

    }

    public DefaultTableModel getSumaValores_Tabla(IEntidad objeto, int anio_Reporte) {

        DefaultTableModel tableModel = new DefaultTableModel();
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            /*aki*/
            CallableStatement proc;
            switch (miEntidadDetalle_Reporte.getCodigo_Filtro_Resumen()) {
                case 1:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA(?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    int[] arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    int[] arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    int cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();  //aki pal 2007  abajooooo
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }
                    break;
                case 2:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Unidad_Ejecutora(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_Unid_Ejec", miEntidadDetalle_Reporte.getId_Unidad_Ejecut());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }

                    break;
                case 3:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Red(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setString("cod_Red", miEntidadDetalle_Reporte.getCodRed());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }    
                    break;
                case 4:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_MicroRed(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setString("cod_MicroRed", miEntidadDetalle_Reporte.getCodMicro_Red());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }    
                    break;
                case 5:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_CategEESS(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_Categ_EESS", miEntidadDetalle_Reporte.getIdCateg_EESS());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }

                    break;
                case 6:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_FON(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_FON", miEntidadDetalle_Reporte.getIdFon());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }

                    break;
                case 7:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Establec_Salud(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("cod_Establec_Salud", miEntidadDetalle_Reporte.getCod_establec());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania();
                    if (cod_Pestania == 1 || cod_Pestania == 16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22 || cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania ==31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21 || cod_Pestania == 8 || cod_Pestania ==26 || cod_Pestania == 12 || cod_Pestania ==25 || cod_Pestania == 13) {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                if (i < arrayCod_Filas.length) {
                                    proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                    proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                    res = proc.executeQuery();
                                    while (res.next()) {
                                        tabla_Valores[i][j] = res.getString("SUM(valor)");
                                    }
                                } else {
                                    tabla_Valores[i][j] = "0";
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);

                    } else {
                        Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                        ResultSet res;
                        for (int i = 0; i < arrayCod_Filas.length; i++) {
                            for (int j = 0; j < arrayCod_Columns.length; j++) {
                                proc.setInt("cod_Fila", arrayCod_Filas[i]);
                                proc.setInt("cod_Columna", arrayCod_Columns[j]);
                                res = proc.executeQuery();
                                while (res.next()) {
                                    tabla_Valores[i][j] = res.getString("SUM(valor)");
                                }

                            }
                        }
                        DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                        String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                        tableModel.setDataVector(tabla_Valores, columNames);
                    }

                    break;

            }


        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        desconectar();
        return tableModel;
    }
    
    public String verificarExistenciaReportes(IEntidad objeto, int anio_Reporte) {

        String rptaVerif = "";
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            /*aki*/
            CallableStatement proc;
            String[][] tabla_Valores;
            ResultSet res;

            switch (miEntidadDetalle_Reporte.getCodigo_Filtro_Resumen()) {
                case 1:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA(?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    int[] arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    int[] arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 2:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Unidad_Ejecutora(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_Unid_Ejec", miEntidadDetalle_Reporte.getId_Unidad_Ejecut());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 3:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Red(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setString("cod_Red", miEntidadDetalle_Reporte.getCodRed());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 4:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_MicroRed(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setString("cod_MicroRed", miEntidadDetalle_Reporte.getCodMicro_Red());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 5:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_CategEESS(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_Categ_EESS", miEntidadDetalle_Reporte.getIdCateg_EESS());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length ][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 6:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_FON(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("id_FON", miEntidadDetalle_Reporte.getIdFon());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
                case 7:
                    proc = conn.prepareCall(" CALL detalle_Reporte_SumarDIRESA_Establec_Salud(?,?,?,?,?) ");
                    //se cargan los parametros de entrada
                    proc.setString("fecha_inicial", miEntidadDetalle_Reporte.getFecha_inicial());//Tipo String
                    proc.setString("fecha_final", miEntidadDetalle_Reporte.getFecha_final());//Tipo String
                    proc.setInt("cod_Establec_Salud", miEntidadDetalle_Reporte.getCod_establec());
                    arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
                    arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
                    tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                    for (int i = 0; i < arrayCod_Filas.length; i++) {
                        for (int j = 0; j < arrayCod_Columns.length; j++) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("SUM(valor)");
                            }
                        }
                    }
                    rptaVerif = tabla_Valores[0][0];
                    break;
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return rptaVerif;
    }

    public DefaultTableModel getVer_Valores_Tabla(IEntidad objeto, int anio_Reporte) {

        DefaultTableModel tableModel = new DefaultTableModel();
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL detalle_Reporte_Ver(?,?,?,?,?,?,?,?,?) ");
            //se cargan los parametros de entrada
            proc.setString("fecha1", miEntidadDetalle_Reporte.getFecha());//Tipo String
            proc.setInt("cod_Establec", miEntidadDetalle_Reporte.getCod_establec());//Tipo int
            proc.setString("cod_Microred", miEntidadDetalle_Reporte.getCod_microred());//Tipo String
            proc.setInt("id_UnidadEjecut", miEntidadDetalle_Reporte.getId_unidadejecutora());//Tipo String
            proc.setInt("cod_Fon", miEntidadDetalle_Reporte.getCod_fon());//Tipo String
            proc.setInt("id_Categ_Estab", miEntidadDetalle_Reporte.getId_categoria_establec());//Tipo String
            proc.setString("cod_Distrito", miEntidadDetalle_Reporte.getCod_distrito());//Tipo String
            

            int[] arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
            int[] arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();

            int cod_Pestania = miEntidadDetalle_Reporte.getCod_Pestania(); //aqui abajoooooooooooooo pal 2007
            if (cod_Pestania == 1 || cod_Pestania ==16 || cod_Pestania == 2 || cod_Pestania == 3 || cod_Pestania ==22|| cod_Pestania == 40 || cod_Pestania ==17 || cod_Pestania == 31 || cod_Pestania == 41 || cod_Pestania ==18 || cod_Pestania == 7 || cod_Pestania ==21|| cod_Pestania == 8 || cod_Pestania ==26|| cod_Pestania == 12 || cod_Pestania ==25|| cod_Pestania == 13) { //aqui he modificado pal 2007
                Object[][] tabla_Valores = new String[arrayCod_Filas.length + 1][arrayCod_Columns.length];
                ResultSet res;
                for (int i = 0; i < arrayCod_Filas.length + 1; i++) {
                    for (int j = 0; j < arrayCod_Columns.length; j++) {
                        if (i < arrayCod_Filas.length) {
                            proc.setInt("cod_Fila", arrayCod_Filas[i]);
                            proc.setInt("cod_Columna", arrayCod_Columns[j]);
                            res = proc.executeQuery();
                            while (res.next()) {
                                tabla_Valores[i][j] = res.getString("valor");
                                
                            }
                        } else {
                            tabla_Valores[i][j] = "0";
                        }

                    }
                }
                DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                tableModel.setDataVector(tabla_Valores, columNames);

            } else {
                Object[][] tabla_Valores = new String[arrayCod_Filas.length][arrayCod_Columns.length];
                ResultSet res;
                for (int i = 0; i < arrayCod_Filas.length; i++) {
                    for (int j = 0; j < arrayCod_Columns.length; j++) {
                        proc.setInt("cod_Fila", arrayCod_Filas[i]);
                        proc.setInt("cod_Columna", arrayCod_Columns[j]);
                        res = proc.executeQuery();
                        while (res.next()) {
                            tabla_Valores[i][j] = res.getString("valor");
                        }

                    }
                }
                DAOEntidadColumna miDAOEntidadColumna = new DAOEntidadColumna();
                String[] columNames = miDAOEntidadColumna.getNombresColumnas(miEntidadDetalle_Reporte.getCod_Estrategia(), miEntidadDetalle_Reporte.getCod_Pestania(), anio_Reporte);
                tableModel.setDataVector(tabla_Valores, columNames);
            }




        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        desconectar();
        return tableModel;
    }
    
    public int getContar_FechasReport(int cod_establec) {
        int rpta = 0;
        try {
            ResultSet prueba;
            CallableStatement proc = getConexion().prepareCall(" CALL detalle_Reporte_ContarFechas(?) ");
            proc.setInt("codigo_Establec", cod_establec);//Tipo String
            prueba = proc.executeQuery();
            while (prueba.next()) {
                rpta = Integer.parseInt(prueba.getString("Total"));
            }
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }
    
    public DefaultTableModel getVer_Fechas_Reportes_Establec(IEntidad objeto, int cantFilas) {
        DefaultTableModel tablemodel = new DefaultTableModel();
        EntidadDetalle_Reporte miEntidadDetalle_Reporte= (EntidadDetalle_Reporte) objeto;
        String[] columNames = {"FECHA", "APELLIDOS Y NOMBRES", "CARGO", "TELÉFONO", "DIRECCIÓN", "E-MAIL"};
        Object[][] data = new String[getContar_FechasReport(miEntidadDetalle_Reporte.getCod_establec())][columNames.length];
        try {
            conectar();
            //realizamos la consulta sql y llenamos los datos en la matriz "Object[][] data"
            CallableStatement pstm = this.getConexion().prepareCall("CALL detalle_Reporte_Ver_Fechas(?)");
            pstm.setInt("codigo_Establec", miEntidadDetalle_Reporte.getCod_establec());
            ResultSet res = pstm.executeQuery();
            int i = 0;
            while (res.next()) {
                data[i][0] = res.getString("fecha");
                data[i][1] = res.getString("Apell. y Nombres");
                data[i][2] = res.getString("cargo");
                data[i][3] = res.getString("telefono");
                data[i][4] = res.getString("direccion");
                data[i][5] = res.getString("email");
                i++;
            }

            res.close();
            //se añade la matriz de datos en el DefaultTableModel
            tablemodel.setDataVector(data, columNames);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return tablemodel;
    }
    
    public void Eliminar_Valores_Detalle_Reporte(IEntidad objeto) {
        
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        try {
            CallableStatement proc = getConexion().prepareCall(" CALL detalle_Reporte_Eliminar(?,?,?,?,?,?,?) ");
            proc.setString("fecha1", miEntidadDetalle_Reporte.getFecha());
            proc.setInt("cod_Establec", miEntidadDetalle_Reporte.getCod_establec());
            proc.setString("cod_Microred", miEntidadDetalle_Reporte.getCod_microred());
            proc.setInt("id_UnidadEjecut", miEntidadDetalle_Reporte.getId_unidadejecutora());
            proc.setInt("cod_Fon", miEntidadDetalle_Reporte.getCod_fon());
            proc.setInt("id_Categ_Estab", miEntidadDetalle_Reporte.getId_categoria_establec());
            proc.setString("cod_Distrito", miEntidadDetalle_Reporte.getCod_distrito());
            proc.executeQuery();
            
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        desconectar();
        
    }
    
    @Override
    public int borrar(String condicion) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int modificar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadDetalle_Reporte miEntidadDetalle_Reporte = (EntidadDetalle_Reporte) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL detalle_Reporte_Actualizar(?,?,?,?,?,?) ");
            //se cargan los parametros de entrada
            proc.setInt("id_User", miEntidadDetalle_Reporte.getId_usuario());//Tipo String
            proc.setString("p_fecha", miEntidadDetalle_Reporte.getFecha());//Tipo int
            proc.setInt("p_codEstablec", miEntidadDetalle_Reporte.getCod_establec());//Tipo String

            int[] arrayCod_Columns = miEntidadDetalle_Reporte.getArrayCodig_columnas();
            int[] arrayCod_Filas = miEntidadDetalle_Reporte.getArrayCodig_filas();
            String [][] arrayValoresActualiz=miEntidadDetalle_Reporte.getValorActualizar();

            ResultSet res;
            for (int i = 0; i < arrayCod_Filas.length; i++) {
                for (int j = 0; j < arrayCod_Columns.length; j++) {

                    proc.setInt("cod_fila", arrayCod_Filas[i]);
                    proc.setInt("cod_columna", arrayCod_Columns[j]);
                    proc.setString("newValor", arrayValoresActualiz[i][j]);
                    
                    res = proc.executeQuery();
                }
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        desconectar();
        return rpta;
    }
}
